// Assertion project main.go
package main

import (
	"fmt"
)

type Bag struct {
	Key string
}

type Bag2 struct {
	Key int
}

func main() {
	var b1 interface{}
	var b2 interface{}

	b1 = Bag{Key: "1"}
	b2 = Bag2{Key: 0}
	//获取interface{}中存放的数据类型
	//方法一：
	{ //判断是否是Bag类型  若不是则置0
		b, ok := b1.(Bag)
		fmt.Println("Bag类型   ：", ok, "数据", b)
	}
	{ //判断是否是Bag2类型  若不是则置0
		b, ok := b2.(Bag2)
		fmt.Println("Bag2类型：", ok, "数据", b)
	}
	//方法二：
	switch v := b1.(type) { //v表示b1 接口转换成Bag对象的值
	case Bag:
		fmt.Println("b1.(type):", "Bag", v)
	case Bag2:
		fmt.Println("b1.(type):", "Bag2", v)
	default:
		fmt.Println("b1.(type):", "other", v)
	}

}
